/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package armazemseujose.model;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

/**
 *
 * @author BRUNA
 */
public class grafico {

    private ArrayList<infoVendas> vendas = new ArrayList();
    private ArrayList<infoVendaCliente> vendasCliente = new ArrayList();
    private int totalVendas = 0;

    public grafico() throws FileNotFoundException {
        leArquivoVenda();
    }

    public void leArquivoVenda() throws FileNotFoundException {
        vendas.removeAll(vendas);
        Scanner scanner = new Scanner(new FileReader("vendas.txt"))
                .useDelimiter("\\||\\n");
        int aux;
        while (scanner.hasNext()) {
            String nomeCliente = scanner.next();
            String produtosVenda = scanner.next();
            String precoTotal = scanner.next();
            String[] produtos = produtosVenda.split(";");
            for (int i = 0; i < produtos.length; i++) {
                infoVendas d = new infoVendas();
                aux = 0;
                String produto[] = produtos[i].split("-");
                String nomeProduto = produto[0];
                String qtd = produto[1];
                for (infoVendas j : vendas) {
                    if (j.getNomeItem().equalsIgnoreCase(nomeProduto)) {
                        j.setQuantidade(j.getQuantidade() + Integer.parseInt(qtd));
                        aux = 1;
                    }
                }
                if (aux == 0) {
                    d.setNomeItem(nomeProduto);
                    d.setQuantidade(Integer.parseInt(qtd));
                    vendas.add(d);
                }
            }
        }
    }

    public CategoryDataset geraDatasetItem() {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        for (infoVendas i : vendas) {
            dataset.addValue(i.getQuantidade(), i.getNomeItem(), "Item");
        }
        return dataset;
    }

    public JPanel criaGraficoVendaProduto(JPanel panel) throws FileNotFoundException {
        leArquivoVenda();
        CategoryDataset cds = geraDatasetItem();
        String titulo = "Gráfico de Venda por produto";
        String eixoy = "Valores";
        String txt_legenda = "Legenda:";
        boolean legenda = true;
        boolean tooltips = true;
        boolean urls = true;
        JFreeChart graf = ChartFactory.createBarChart3D(titulo, txt_legenda, eixoy, cds, PlotOrientation.VERTICAL, legenda, tooltips, urls);
        ChartPanel myChartPanel = new ChartPanel(graf, true);
        myChartPanel.setSize(panel.getWidth(), panel.getHeight());
        myChartPanel.setVisible(true);
        panel.removeAll();
        panel.add(myChartPanel);
        panel.revalidate();
        panel.repaint();
        return panel;
    }
    
    public CategoryDataset  geraDatasetCliente() throws FileNotFoundException{
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        geraDatasetClienteAux();
        for(infoVendaCliente i : vendasCliente){
            dataset.addValue(((i.getQtd()*100/totalVendas)), i.getNomeCliente(), "Clientes");
        }
        return dataset;
    }
    
    public void geraDatasetClienteAux() throws FileNotFoundException{
        if(vendasCliente.size() > 5){
            for( int i = 5 ; i < vendasCliente.size() ; i = i){
                int menor = procuraMenorQtd();
                if(vendasCliente.get(i).getQtd() > vendasCliente.get(menor).getQtd()){
                    vendasCliente.set(menor, vendasCliente.get(i));
                    vendasCliente.remove(i);
                }
                }
            }
        }
    
    public int procuraMenorQtd(){
        infoVendaCliente a = vendasCliente.get(0);
        int aux = 0;
        for(int i = 1 ; i < 5 ; i++){
            if(a.getQtd() > vendasCliente.get(i).getQtd()){
                a = vendasCliente.get(i);
                aux = i;
            }
        }
        return aux;
    }
    
    public JPanel criaGraficoVendaCliente(JPanel panel) throws FileNotFoundException {
        leArquivoVendaCliente();
        CategoryDataset cds = geraDatasetCliente();
        String titulo = "Gráfico de clientes que mais compraram";
        String eixoy = "percentual(%)";
        String txt_legenda = "Legenda:";
        boolean legenda = true;
        boolean tooltips = true;
        boolean urls = true;
        JFreeChart graf = ChartFactory.createBarChart3D(titulo, txt_legenda, eixoy, cds, PlotOrientation.VERTICAL, legenda, tooltips, urls);
        ChartPanel myChartPanel = new ChartPanel(graf, true);
        myChartPanel.setSize(panel.getWidth(), panel.getHeight());
        myChartPanel.setVisible(true);
        panel.removeAll();
        panel.add(myChartPanel);
        panel.revalidate();
        panel.repaint();
        return panel;
    }
    
    public void leArquivoVendaCliente() throws FileNotFoundException{
        vendasCliente.removeAll(vendasCliente);
        Scanner scanner = new Scanner(new FileReader("vendas.txt"))
                .useDelimiter("\\||\\n");
        int aux;
        while (scanner.hasNext()) {
            String nomeCliente = scanner.next();
            String produtosVenda = scanner.next();
            String precoTotal = scanner.next();
            String[] produtos = produtosVenda.split(";");
            for (int i = 0; i < produtos.length; i++) {
                infoVendaCliente d = new infoVendaCliente();
                aux = 0;
                String produto[] = produtos[i].split("-");
                String qtd = produto[1];
                totalVendas = totalVendas + Integer.parseInt(qtd);
                for (infoVendaCliente j : vendasCliente) {
                    if(j.getNomeCliente().equalsIgnoreCase(nomeCliente)){
                        j.setQtd(j.getQtd() + Integer.parseInt(qtd));
                        aux = 1;
                    }
                }
                if (aux == 0) {
                    d.setNomeCliente(nomeCliente);
                    d.setQtd(Integer.parseInt(qtd));
                    vendasCliente.add(d);
                }
            }
        }
    }
    
}
